package com.leetcode.day01;

import java.util.Scanner;

/**
 * 过河卒
 * 棋盘上
 * A
 * A 点有一个过河卒，需要走到目标
 * B
 * B 点。卒行走的规则：可以向下、或者向右。同时在棋盘上
 * C
 * C 点有一个对方的马，该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
 * <p>
 * 棋盘用坐标表示，
 * A
 * A 点
 * (
 * 0
 * ,
 * 0
 * )
 * (0,0)、
 * B
 * B 点
 * (
 * n
 * ,
 * m
 * )
 * (n,m)，同样马的位置坐标是需要给出的。
 */
public class Revier {

    private static int[][] m = new int[25][25];

    /**
     * 马的坐标 （j, k）
     * m(j - 1 , k - 2)  (j + 1, k - 2) 、(j - 2, k - 1) (j + 2, k - 1) 、(j - 2, k + 1)、(j + 2, k + 1)、(j - 1, k + 2)、(j + 1, k + 2)
     */

    /**
     * x 纵坐标
     * y 横坐标
     * dfs(x,y) 代表 到达（x,y）路径走法
     *
     * @param 0 <= x <= 20
     * @param 0 <= y <= 20
     * @return
     */
    public static int dfs(int x, int y) {
        if (x == 0 && y == 0) {
            return 1;
        }
        if (m[x][y] == 1) {
            return 0;
        }
        if (x == 0) {
            return 1;
        }
        if (y == 0) {
            return 1;
        }
        int result =  dfs(x - 1, y) + dfs(x, y - 1);
        System.out.println("(x" + x + " , y"+ y+" ) result= " + result);
        return result ;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        int y = scanner.nextInt();
        int j = scanner.nextInt();
        int k = scanner.nextInt();
        init(j, k);
        System.out.println(dfs(x, y));

    }

    /**
     * 马的坐标 （j, k）
     * m(j - 1 , k - 2)  (j + 1, k - 2) 、(j - 2, k - 1) (j + 2, k - 1) 、(j - 2, k + 1)、(j + 2, k + 1)、(j - 1, k + 2)、(j + 1, k + 2)
     */
    private static void init(int j, int k) {
        m[j][k] = 1 ;
        if (j >= 1) {
            if (k >= 2) {
                m[j - 1][k - 2] = 1;
                m[j + 1][k - 2] = 1;
                m[j + 1][k + 2] = 1;
            }
            m[j - 1][k + 2] = 1;
        }
        if (j >= 2) {
            if (k >= 1) {
                m[j - 2][k - 1] = 1;
                m[j + 2][k - 1] = 1;
                m[j + 2][k + 1] = 1;
            }
            m[j-2][k + 1] = 1;
        }
    }

}
